package cc.aileron.commons.accessor.factory;

import cc.aileron.commons.accessor.PojoAccessorConvertorFactory;
import cc.aileron.commons.accessor.properties.PojoProperties;
import cc.aileron.commons.accessor.properties.PojoPropertiesChainAccessor;

/**
 * PojoAccessor 関連のインスタンス生成を管理する
 * 
 * @author Aileron
 * 
 */
public interface PojoAccessorInstanceManager
{
    /**
     * @return PojoAccessorConvertorFactory
     */
    PojoAccessorConvertorFactory getConvertorFactory();

    /**
     * PojoPropertiesChainAccesserの生成
     * 
     * @param pojo
     * @param <T>
     * @param object
     * @return PojoPropertiesChainAccessor
     */
    <T> PojoPropertiesChainAccessor<T> newChainAccessor(
            final PojoProperties<T> pojo);

    /**
     * PojoPropertiesの生成
     * @param <T> 
     * 
     * @param object
     * @return PojoProperties
     */
    <T> PojoProperties<T> newProperties(final T object);

}